syntax = "proto3";

package org.tio.examples.im.common.packets;

option java_package = "org.tio.examples.im.common.packets";
option java_multiple_files = true;

enum DeviceType {
	DEVICE_TYPE_UNKNOW = 0;
	DEVICE_TYPE_PC = 1;
	DEVICE_TYPE_ANDROID = 2;
	DEVICE_TYPE_IOS = 3;
}

enum Command {
	COMMAND_UNKNOW = 0;
	COMMAND_HANDSHAKE_REQ = 1; //握手请求，含http的websocket握手请求
	COMMAND_HANDSHAKE_RESP = 2; //握手响应，含http的websocket握手响应
	COMMAND_AUTH_REQ = 3; //鉴权请求
	COMMAND_AUTH_RESP = 4; // 鉴权响应
	COMMAND_JOIN_GROUP_REQ = 5; //申请进入群组
	COMMAND_JOIN_GROUP_RESP = 6; //申请进入群组响应
	COMMAND_JOIN_GROUP_NOTIFY_RESP = 7; //进入房间通知
	COMMAND_CHAT_REQ = 8; //聊天请求
	COMMAND_CHAT_RESP = 9; //聊天响应
	COMMAND_START_SHOW_REQ = 10; //开播请求
	COMMAND_START_SHOW_RESP = 11; //开播响应
	COMMAND_END_SHOW_REQ = 12; //停播请求
	COMMAND_END_SHOW_NOTIFY_RESP = 13; //停播通知
	COMMAND_HEARTBEAT_REQ = 14; //心跳请求
	COMMAND_CLOSE_REQ = 15; //关闭请求
}

/**
 * 鉴权请求
 */
message AuthReqBody {
	int64 time = 1;//消息发送时间
	string deviceId = 2;// device id(手机设备id)
	string token = 3;
	DeviceType deviceType = 4;//clienttype客户端类型1-pc 2-android 3-ios
	string cid = 5;//渠道号
	string appVersion = 6;//app版本号
	string deviceInfo = 7;//手机型号信息，譬如华为某型号
	int64 seq = 8;//序列号
 	string sign = 9;//签名
}

/**
 * 鉴权响应
 */
message AuthRespBody {
	int64 time = 1;//消息发送时间
}

/**
 * 加入群组请求
 */
message JoinReqBody {
	int64 time = 1;//消息发送时间
	string group = 2;
}

/**
 * 加入群组申请的结果
 */
enum JoinGroupResult {
	JOIN_GROUP_RESULT_UNKNOW = 0;//不允许进入，原因为其它
	JOIN_GROUP_RESULT_OK = 1;//允许进入
	JOIN_GROUP_RESULT_NOT_EXIST = 2;//组不存在
	JOIN_GROUP_RESULT_GROUP_FULL = 3;//组满
	JOIN_GROUP_RESULT_IN_BACKLIST = 4;//在黑名单中
	JOIN_GROUP_RESULT_TAKEOUTED = 5;//被踢
}

/**
 * 加入群组响应
 */
message JoinRespBody {
	int64 time = 1;//消息发送时间
	JoinGroupResult result = 2;
	string group = 3;
}

/**
 * 聊天类型
 */
enum ChatType {
	CHAT_TYPE_UNKNOW = 0;//未知
	CHAT_TYPE_PUBLIC = 1;//公聊
	CHAT_TYPE_PRIVATE = 2;//私聊
}
/**
 * 聊天请求
 */
message ChatReqBody {
	int64 time = 1;//消息发送时间
	ChatType type = 2; //聊天类型
	string text = 3; //聊天内容
	string group = 4; //目标组id
	int32 toId = 5; //目标用户id，
	string toNick = 6; //目标用户nick
}

/**
 * 聊天响应
 */
message ChatRespBody {
	int64 time = 1;//消息发送时间
	ChatType type = 2; //聊天类型
	string text = 3; //聊天内容
	int32 fromId = 4; //发送聊天消息的用户id
	string fromNick = 5; //发送聊天消息的用户nick
	int32 toId = 6; //目标用户id
	string toNick = 7; //目标用户nick
	string group = 8; //目标组id
}